//故障键盘
/*你的笔记本键盘存在故障，每当你在上面输入字符 'i' 时，它会反转你所写的字符串。而输入其他字符则可以正常工作。

给你一个下标从 0 开始的字符串 s ，请你用故障键盘依次输入每个字符。

返回最终笔记本屏幕上输出的字符串。
1 <= s.length <= 100
s 由小写英文字母组成
s[0] != 'i'
*/
void reverse_string(char* s, int right) {
    int left = 0;
    while (left < right) {
        int temp = s[left];
        s[left] = s[right];
        s[right] = temp;
        left++;
        right--;
    }
}
char* finalString(char* s) {
    char* arr = (char*)calloc(strlen(s) + 1, sizeof(char));
    int j = 0;
    for (int i = 0; i < strlen(s); i++) {
        int count = 0;
        while (s[i] == 'i') {
            count++;
            i++;
        }
        if (count % 2)
            reverse_string(arr, j - 1);
        if (i < strlen(s)) {
            arr[j] = s[i];
            j++;
        }
    }
    return arr;
}


//按身高排序
/*给你一个字符串数组 names ，和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。

对于每个下标 i，names[i] 和 heights[i] 表示第 i 个人的名字和身高。

请按身高 降序 顺序返回对应的名字数组 names 。
n == names.length == heights.length
1 <= n <= 103
1 <= names[i].length <= 20
1 <= heights[i] <= 105
names[i] 由大小写英文字母组成
heights 中的所有值互不相同
*/
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
struct Data {
    int index;
    int height;
};
typedef struct Data Data;
int compar(const void* q1, const void* q2) {
    return (((Data*)(q2))->height - ((Data*)(q1))->height);
}

char** sortPeople(char** names, int namesSize, int* heights, int heightsSize,
                  int* returnSize) {
    *returnSize = namesSize;
    Data arr[heightsSize];
    for (int i = 0; i < heightsSize; i++) {
        arr[i].height = heights[i];
        arr[i].index = i;
    }
    qsort(arr, heightsSize, sizeof(Data), compar);
    char** nums = (char**)calloc(namesSize, sizeof(char*));
    for (int i = 0; i <heightsSize; i++) {
        nums[i] = names[arr[i].index];
    }
    return nums;
}